<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/7/11
 * Time: 9:40
 */

/**
 * 删除目录及目录下面的所有文件
 *
 * @param	string	$dir		路径
 * @return	bool	如果成功则返回 TRUE，失败则返回 FALSE
 */
function dir_delete($dir) {
    $dir = dir_path($dir);
    if (!is_dir($dir)) return FALSE;
    $list = glob($dir.'*');
    foreach($list as $v) {
        is_dir($v) ? dir_delete($v) : @unlink($v);
    }
    return @rmdir($dir);
}

/**
 * 转化 \ 为 /
 *
 * @param	string	$path	路径
 * @return	string	路径
 */
function dir_path($path) {
    $path = str_replace('\\', '/', $path);
    if(substr($path, -1) != '/') $path = $path.'/';
    return $path;
}

/**
 * 列出目录下所有文件
 *
 * @param	string	$path		路径
 * @param	string	$exts		扩展名
 * @param	array	$list		增加的文件列表
 * @return	array	所有满足条件的文件
 */
function dir_list($path, $exts = '', $list= array()) {
    $path = dir_path($path);
    $files = glob($path.'*');
    foreach($files as $v) {
        if (!$exts || pathinfo($v, PATHINFO_EXTENSION) == $exts) {
            $list[] = $v;
            if (is_dir($v)) {
                $list = dir_list($v, $exts, $list);
            }
        }
    }
    return $list;
}

/***
 * json 封装
 * $data 要转化的数据,格式 array
 */
function json($data){
    $json=json_encode($data,JSON_UNESCAPED_UNICODE);
    return $json;
}

/***下载******/
//fname为要下载的文件名
//$fpath为下载文件所在文件夹，默认是downlod
function download($fpath="download/"){
    //获得要下载的文件名
    $pathinfo=pathinfo($fpath);

    $filename=$pathinfo['filename'].'.'.$pathinfo['extension'];


    //避免中文文件名出现检测不到文件名的情况，进行转码utf-8->gbk
//    $filename=iconv('utf-8', 'gb2312', $fname);
    $downpath=$fpath;
    if(!file_exists($downpath)){//检测文件是否存在
        echo "文件不存在！";
        die();
    }

    $fp=fopen($downpath,'r');//只读方式打开
    $filesize=filesize($downpath);//文件大小
//    echo $filesize;
//    die;
    //返回的文件(流形式)
    header("Content-type: application/octet-stream");
    //按照字节大小返回
    header("Accept-Ranges: bytes");
    //返回文件大小
    header("Accept-Length: $filesize");
    //这里客户端的弹出对话框，对应的文件名
    header("Content-Disposition: attachment; filename=".$filename);
    //清除缓存
    ob_clean();
    flush();
    //设置分流
    $buffer=1024;
    //来个文件字节计数器
    $count=0;
    while(!feof($fp)&&($filesize-$count>0)){
        $data=fread($fp,$buffer);
        $count+=$data;//计数
        echo $data;//传数据给浏览器端
    }

    fclose($fp);

}
/**上传图片
 **$name 上传照片的名字
 * $path 上传照片的图片路径
 ******/
function uploadimg($name,$path){
    //上传图片
//随机生成上传文件名称，不重复
    $filename=date("Ymds"). uniqid();
//初始化上传类
    $uploadobj=new uploadInit();
//上传照片详情页的装饰图
    $upinfo=$uploadobj->upload($name,$filename,$path);
    return $upinfo;
}

//将上传文件整理为标准数组
 function uploadformat($fieldName='')
{
    if ($fieldName == null) {
        $files = $_FILES;
    } else if (isset($_FILES[$fieldName])) {
        $files[$fieldName] = $_FILES[$fieldName];
    }
    if (!isset($files)) {
        $this->error = '没有任何文件上传';
        return false;
    }
    $info = array();
    $n = 0;
    foreach ($files as $name => $v) {
        if (is_array($v ['name'])) {
            $count = count($v ['name']);
            for ($i = 0; $i < $count; $i++) {
                foreach ($v as $m => $k) {
                   @$info [$n] [$m] = $k [$i];
                }
                $info [$n] ['fieldname'] = $name; //字段名
                $n++;
            }
        } else {
            $info [$n] = $v;
            $info [$n] ['fieldname'] = $name; //字段名
            $n++;
        }
    }
    return $info;
}

/***
 * 判断是否post
 * is_post
 */
function is_post(){
    return (strtolower(get_service('REQUEST_METHOD')) == 'post') ? true : false;
}

/**
 * @return bool
 * is_get
 */
function is_get(){
    return (strtolower(get_service('REQUEST_METHOD')) == 'get') ? true : false;
}


/**
 * Request-获取SERVICE信息
 *  Controller中使用方法：$this->controller->get_service
 * @param  string $name SERVER的键值名称
 * @return string
 */
function get_service($name = '') {
    if ($name == '') return $_SERVER;
    return (isset($_SERVER[$name])) ? $_SERVER[$name] : '';
}

/**
 *	控制器 重定向
 *  Controller中使用方法：$this->controller->redirect($url, $time = 0)
 * 	@param  string  $url   跳转的URL路径
 * 	@param  int     $time  多少秒后跳转
 *  @return
 */
 function redirect($url, $time = 0) {
    if (!headers_sent()) {
        if ($time === 0) header("Location: ".$url);
        header("refresh:" . $time . ";url=" .$url. "");
    } else {
        exit("<meta http-equiv='Refresh' content='" . $time . ";URL=" .$url. "'>");
    }
}
/**
 * 获得当前用户信息
 */
function getUser(){
    $user=$_SESSION['user'];
    return $user;
}

/**
 * 检查是否拥有权限
 */
function checkPri(){
    //引入db类
    $path=dirname(dirname(__FILE__));
    require_once $path.'/inc/mysqldb.class.php';
    $db=new mysqldb();
        $url=pathinfo($_SERVER['SCRIPT_FILENAME']);
        //当前访问的网页
        $url_name=$url['basename'];
        //取得当前的用户信息
        $user=getUser();
        $role_id=$user['role_id'];
        //-1代表是超级管理员
        if($role_id!=-1){
            //查出当前用户拥有的权限
            $role_pri=$db->select("pri.*","#@__role_menu_y rm",'LEFT JOIN #@__menu_y pri ON rm.menu_id=pri.id','role_id='."'{$role_id}'");
            $pri=array();
            //对权限进行整理，当前用户拥有的权限
            foreach ($role_pri as $k=>$v){
                $pri[]=$v['menu_url'];
            }
            //判断当前用户是否有权限访问
            if(!in_array($url_name,$pri)){
                $html=<<<HEAD
                <div style="margin: 0 auto;width: 400px;height: 200px;border: 1px solid gray;border-radius:25px">
                    <p style="text-align: center;color: red;padding-top: 80px;">您没有相应的权限，如有需要请联系超级管理员</p>
                </div>
HEAD;


                echo $html;


//                echo '权限不足,请联系管理员';
                redirect('home.php',2);
                die;
            }


        }

}

/******
 *  检查权限 返回值为bool 用于ajax进行判定
 * $url 权限访问路径
 */
function ckPri($p_url=''){
    //引入db类
    $path=dirname(dirname(__FILE__));
    require_once $path.'/inc/mysqldb.class.php';
    $db=new mysqldb();
    $url=pathinfo($_SERVER['SCRIPT_FILENAME']);
    //当前访问的网页
    if(empty($p_url)){
        $url_name=$url['basename'];
    }else{
        $url_name=$p_url;
    }
    //取得当前的用户信息
    $user=getUser();
    $role_id=$user['role_id'];
    //-1代表是超级管理员
    if($role_id!=-1){
        //查出当前用户拥有的权限
        $role_pri=$db->select("pri.*","#@__role_menu_y rm",'LEFT JOIN #@__menu_y pri ON rm.menu_id=pri.id','role_id='."'{$role_id}'");
        $pri=array();
        //对权限进行整理，当前用户拥有的权限
        foreach ($role_pri as $k=>$v){
            $pri[]=$v['menu_url'];
        }
        //判断当前用户是否有权限访问
        if(!in_array($url_name,$pri)){
            return false;
        }else{
            return true;
        }
    }else{
        return true;
    }
}
/**
 * 随机生成手机验证码
 */

/***************验证当前用户是否登录************/
/**
 * 随机生成手机验证码
 */
function get_captcha($length = 6) {
    $min = pow(10 , ($length - 1));
    $max = pow(10, $length) - 1;
    return rand($min, $max);
}


/**************二维数组变一维数组***************/
function i_array_column($input, $columnKey, $indexKey=null){
    if(!function_exists('array_column')){
        $columnKeyIsNumber  = (is_numeric($columnKey))?true:false;
        $indexKeyIsNull            = (is_null($indexKey))?true :false;
        $indexKeyIsNumber     = (is_numeric($indexKey))?true:false;
        $result                         = array();
        foreach((array)$input as $key=>$row){
            if($columnKeyIsNumber){
                $tmp= array_slice($row, $columnKey, 1);
                $tmp= (is_array($tmp) && !empty($tmp))?current($tmp):null;
            }else{
                $tmp= isset($row[$columnKey])?$row[$columnKey]:null;
            }
            if(!$indexKeyIsNull){
                if($indexKeyIsNumber){
                    $key = array_slice($row, $indexKey, 1);
                    $key = (is_array($key) && !empty($key))?current($key):null;
                    $key = is_null($key)?0:$key;
                }else{
                    $key = isset($row[$indexKey])?$row[$indexKey]:0;
                }
            }
            $result[$key] = $tmp;
        }
        return $result;
    }else{
        return array_column($input, $columnKey, $indexKey);
    }

}



/**************************数组转字符串*****************/

/**
 *要转换的数组，使用什么符号分隔数组，默认是逗号
 */
function tostring($arr,$pieces=','){
    $str='';
    //判断当前的数组是否只有一个
    $num=count($arr);
    if($num==1){
        foreach ($arr as $k=>$v){
            $str=$v;
        }
        return $str;
    }
    //如果是多个的数组的话就直接分隔
    $str=implode(',',$arr);
    return $str;

}

/*******************查找当前字符是否在另外一个字符串中*********************/
/**
 * @param $haystack 在这个字符串中查找
 * @param $needle  要查找的字符串
 * @return bool
 */
function isInString($haystack, $needle) {
//防止$needle 位于开始的位置
//    if($haystack==$needle)
//           return true;
//    else
//           return false;
    $haystack = '-_-!' . $haystack;
    return (bool)strpos($haystack, $needle);
}

/****************************生成订单号**********************/
//生成订单号
function order_num(){
    return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
}

//微信curl
//http请求
/**
 * @param $url 请求的地址
 * @param string $method 请求的方式，get还是post，默认get
 * @param null $data  默认get请求没有data数据，如果post，需要data
 * @param bool $https  默认false http请求，true为https请求
 * @return mixed 返回请求的数据json  or xml
 */
function Request($url,$method='get',$data=null,$https=true){
    $ch=curl_init();//初始化curl
    curl_setopt($ch,CURLOPT_URL,$url);//设置请求的路径
    curl_setopt($ch,CURLOPT_HEADER,false);//不用响应头信息
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//执行后以文件流返回，不是直接输出
    //是否是https请求，如果是https请求就设置以下两项
    //在https请求时，不对服务器进行验证
    if($https){
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//不做服务器认证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//不做客户端认证
    }
    //如果是post数据提交还需要设置下面两项
    if($method=='post'){
        //设置请求方式post数据
        // 类似application/x-www-form-urlencoded
        curl_setopt($ch,CURLOPT_POST,true);
        //post的数据
        curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
    }
    $str=curl_exec($ch);//接受到的数据流
    curl_close($ch);//关闭curl，释放资源
    return $str;

}
/*************我的中照片详情，照片详情************************/
/**
 * @param $dopage 分页对象
 * @param $mem_id  会员id
 * @param $o_id   订单id
 * @param $d_id   当前相片详情页id
 * @return mixed  返回数组
 */
function getPhone($dopage,$mem_id,$o_id,$d_id){

    $sql="SELECT mt.id,mt.photo,mt.order_id FROM #@__order_y od RIGHT JOIN #@__mem_type_y mt ON od.id=mt.order_id WHERE mt.mem_id={$mem_id} AND mt.detail_id={$d_id} AND mt.status=2 AND od.orderstatus_id in (3,5) or orderstatus_id>5";
    //分页数据
    $custom=$dopage->GetPage($sql,10,'mt.mem_id');
    $page=$dopage->GetList();
    //添加门店信息和预约时间
    foreach($custom as $k=>$v){
        //会员门店信息
        $store_id=$GLOBALS['db']->GetOne("store_id","#@__order_y","","id=".$v['order_id']);
        $store_id=$GLOBALS['db']->GetOne("store_id","#@__mem_store_y","","id=".$store_id['store_id']);

        //根据门店信息查询出当前的信息
        $store_name=$GLOBALS['db']->GetOne('store_name',"#@__store_y","",'id='.$store_id['store_id']);
        $custom[$k]['store_name']=$store_name['store_name'];
        //预约时间信息
        $bespeak_id=$GLOBALS['db']->GetOne("bespeak_id","#@__order_y","","id=".$v['order_id']);
        if($bespeak_id && $bespeak_id['bespeak_id']){
            //取出当前预约时间信息
            $bespeak_name=$GLOBALS['db']->GetOne('cadate',"#@__bespeak_y","",'id='.$bespeak_id['bespeak_id']);
            $custom[$k]['cadate']=$bespeak_name['cadate'];
        }else{
            $custom[$k]['cadate']='';
        }


    }
    return $custom;
}
/**************后台商家权限验证是否已登录********************/
function chk_seller(){
     if(!@$_SESSION['sell_user']){
         return false;
     }
     return true;

}
/***********调试输出打印**************/
//要打印的变量 $arr;
function d($arr){
    echo '<pre/>';
    var_dump($arr);
}
/*********根据年月获取当月的天数*************/
/**
 * @param $date 日期  传入日期 例如2017-8-1
 * @param $rtype 参数1代表返回天数，参数2代表返回是当月每天具体日期
 * @return string
 */
function get_day( $date ,$rtype = '1')
{
    $tem = explode('-' , $date);    //切割日期 得到年份和月份
    $year = $tem['0'];
    $month = $tem['1'];
    if( in_array($month , array( 1 , 3 , 5 , 7 , 8 , '01' , '03' , '05' , '07' , '08' , 10 , 12)))
    {
        // $text = $year.'年的'.$month.'月有31天';
        $text = '31';
    }
    elseif( $month == 2 )
    {
        if ( $year%400 == 0 || ($year%4 == 0 && $year%100 !== 0) )    //判断是否是闰年
        {
            // $text = $year.'年的'.$month.'月有29天';
            $text = '29';
        }
        else{
            // $text = $year.'年的'.$month.'月有28天';
            $text = '28';
        }
    }
    else{
        // $text = $year.'年的'.$month.'月有30天';
        $text = '30';
    }
    if ($rtype == '2') {
        for ($i = 1; $i <= $text ; $i ++ ) {
            if($i<=9)
               $r[] = $year."-".$month."-"."0".$i;
            else
                $r[] = $year."-".$month."-".$i;
        }
    } else {
        $r = $text;
    }
    return $r;
}
/********************计算两个日期的天数**********************/
/***
 * 求两个日期之间相差的天数
 * (针对1970年1月1日之后，求之前可以采用泰勒公式)
 * @param string $day1 输入日期
 * @param string $day2 输入日期
 * @return number
 */
function data_days($day1,$day2){
    $second1 = strtotime($day1);
    $second2 = strtotime($day2);
    //如果第一个小于第二个，就进行转换位置
    if ($second1 < $second2) {
        $tmp = $second2;
        $second2 = $second1;
        $second1 = $tmp;
    }
    return ($second1 - $second2) / 86400;
}




/*******一维索引数组进行重新排序********/
function sortArr($arr){
    $sarr='';
    foreach ($arr as $K=>$v){
        $sarr[]=$v;
    }
    return $sarr;

}
/******************手机号隐藏中间4位**************/
/**
 * @param $phone  手机号
 * @return mixed
 */
function hidtel($phone){
    $IsWhat = preg_match('/(0[0-9]{2,3}[\-]?[2-9][0-9]{6,7}[\-]?[0-9]?)/i',$phone); //固定电话
    if($IsWhat == 1){
        return preg_replace('/(0[0-9]{2,3}[\-]?[2-9])[0-9]{3,4}([0-9]{3}[\-]?[0-9]?)/i','$1****$2',$phone);
    }else{
        return  preg_replace('/(1[35678]{1}[0-9])[0-9]{4}([0-9]{4})/i','$1****$2',$phone);
    }
}


/**************************微信价格转换*******************************/
//浮点精度
/**
 * PHP精确计算  主要用于货币的计算用
 * @param $n1 第一个数
 * @param $symbol 计算符号 + - * / %
 * @param $n2 第二个数
 * @param string $scale  精度 默认为小数点后两位
 * @return  string
 */
function ncPriceCalculate($n1,$symbol,$n2,$scale = '2'){
    $res = "";
    switch ($symbol){
        case "+"://加法
            $res = bcadd($n1,$n2,$scale);break;
        case "-"://减法
            $res = bcsub($n1,$n2,$scale);break;
        case "*"://乘法
            $res = bcmul($n1,$n2,$scale);break;
        case "/"://除法
            $res = bcdiv($n1,$n2,$scale);break;
        case "%"://求余、取模
            $res = bcmod($n1,$n2,$scale);break;
        default:
            $res = "";break;
    }
    return $res;
}


/**
 * 价格由元转分
 * @param $price 金额
 * @return int
 */
function ncPriceYuan2fen($price){
    $price = (int) ncPriceCalculate(100,"*", ncPriceFormat($price));
    return $price;
}

/**
 * 价格格式化
 *
 * @param int   $price
 * @return string   $price_format
 */
function ncPriceFormat($price) {
    $price_format   = number_format($price,2,'.','');
    return $price_format;
}


/*********************生成二维码*********************/
/**
 * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本，具体可以查看二维码数据格式】
 * @param string $chl 二维码包含的信息，可以是数字、字符、二进制信息、汉字。不能混合数据类型，数据必须经过UTF-8 URL-encoded.如果需要传递的信息超过2K个字节，请使用POST方式
 * @param int $widhtHeight 生成二维码的尺寸设置
 * @param string $EC_level 可选纠错级别，QR码支持四个等级纠错，用来恢复丢失的、读错的、模糊的、数据。
 *                 L-默认：可以识别已损失的7%的数据
 *                 M-可以识别已损失15%的数据
 *                 Q-可以识别已损失25%的数据
 *                 H-可以识别已损失30%的数据
 * @param int $margin 生成的二维码离图片边框的距离
 */

function Qcode($url,$x ='150',$level='L',$margin='0'){
    return '<img src="http://chart.apis.google.com/chart?chs='.$x.'x'.$x.'&cht=qr&chld='.$level.'|'.$margin.'&chl='.urlencode($url).'" />';
}


//二维数组去重

//    return $result;

function remove_array($array){
    $result=array();
    foreach ($array as $key=>$value){
       $has=false;
       foreach($result as $val){
           if($val['detail_id']==$value['detail_id']){
               $has=true;
               break;
           }
       }
       if(!$has){
           $result[]=$value;
       }
    }
    return $result;

}

/**

 * 发送短信

 * @param $phone

 * @param $msg

 */



function sendSms($phone, $msg)
{
    $datetimestr = date("Y-m-d H:i:s");
    $passwordstr = md5(SMS_PASSWORD. $datetimestr);
    $msg = $msg . "【桓鸣映像】";
    $content = urlencode($msg);
    $datetimestr = str_replace(" ", "%20", $datetimestr);
    $url = "http://api.sms1086.com/Api/sendutf8.aspx?username=" . SMS_USER_NAME . "&password=" . $passwordstr . "&mobiles=" . $phone . "&content=" . $content . "&timestamp=" . $datetimestr . "";
    $curl = curl_init();
    //开启header
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_URL, $url);
    $contentstr = curl_exec($curl);
    curl_close($curl);
    $contentstr = urldecode($contentstr);
    $sendarr = explode("&", $contentstr);
    $sendstatus=explode('=',$sendarr[0]);
    if ($sendstatus[1]==0) {
        return true;
    } else {
        return false;
    }

}

//ajax返回
function ajaxReturn($data)

{

    header('Content-Type:application/json; charset=utf-8');

    exit(json_encode($data));

}
//获取文件的后缀名称
/**
 * @param $file 输入文件名称
 * @return mixed
 */
function get_extension($file)
{
    return pathinfo($file, PATHINFO_EXTENSION);
}

//PHP获取不重复的5个随机字符
function random_str(){
    //获取随机0-9,a-Z的随机5个不重复的字符
    $menber = range('0','9');     //获取0-9的数据
    $lowercase = range('a','z'); //获取a-z的数据
    $uppercase = range('A','Z'); //获取A-Z的数据
    $arr = array_merge($menber,$lowercase,$uppercase); //合并数组
    shuffle($arr); //打乱数组
    $len = 5;        //获取字符个数(5个)
    $arr_end = array_slice($arr,0,$len); //取出从角标0开始,5个数组单元
    $result = '';    //使用一个变量保存最终结果值
    foreach($arr_end as $k=>$v){
        $result .= $v; //拼接字符,并保存在$result变量中
    }
    return $result; //返回结果值
}




//加密和解密
// $string： 明文 或 密文
// $operation：DECODE表示解密,其它表示加密 ENCODE 加密
// $key： 密匙
// $expiry：密文有效期 0代表永久有效
function key_authcode($string, $operation = 'DECODE', $key = '', $expiry = 0){

    if($operation == 'DECODE') {
        $string = str_replace('[a]','+',$string);
        $string = str_replace('[b]','&',$string);
        $string = str_replace('[c]','/',$string);
    }
    $ckey_length = 4;
    $key = md5($key ? $key : 'livcmsencryption ');
    $keya = md5(substr($key, 0, 16));
    $keyb = md5(substr($key, 16, 16));
    $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
    $cryptkey = $keya.md5($keya.$keyc);
    $key_length = strlen($cryptkey);
    $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
    $string_length = strlen($string);
    $result = '';
    $box = range(0, 255);
    $rndkey = array();
    for($i = 0; $i <= 255; $i++) {
        $rndkey[$i] = ord($cryptkey[$i % $key_length]);
    }
    for($j = $i = 0; $i < 256; $i++) {
        $j = ($j + $box[$i] + $rndkey[$i]) % 256;
        $tmp = $box[$i];
        $box[$i] = $box[$j];
        $box[$j] = $tmp;
    }
    for($a = $j = $i = 0; $i < $string_length; $i++) {
        $a = ($a + 1) % 256;
        $j = ($j + $box[$a]) % 256;
        $tmp = $box[$a];
        $box[$a] = $box[$j];
        $box[$j] = $tmp;
        $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
    }
    if($operation == 'DECODE') {
        if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {

            return substr($result, 26);
        } else {
            return '';
        }
    } else {
        $ustr = $keyc.str_replace('=', '', base64_encode($result));
        $ustr = str_replace('+','[a]',$ustr);
        $ustr = str_replace('&','[b]',$ustr);
        $ustr = str_replace('/','[c]',$ustr);
        return $ustr;
    }
}

/**
 * 根据ip地址获得城市
 * [GetIpLookup description]
 * @param string $ip [description]
 */
function GetIpLookup($ip = ''){
  if(empty($ip)){
    return '请输入IP地址';
  }
  $res = @file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=' . $ip);
  if(empty($res)){ return false; }
  $jsonMatches = array();
  preg_match('#\{.+?\}#', $res, $jsonMatches);
  if(!isset($jsonMatches[0])){ return false; }
  $json = json_decode($jsonMatches[0], true);
  if(isset($json['ret']) && $json['ret'] == 1){
    $json['ip'] = $ip;
    unset($json['ret']);
  }else{
    return false;
  }
  return $json;
}
// $ipInfos = GetIpLookup('123.125.114.144'); //baidu.com IP地址  //ipInfos 是一个数组

//获取IP=地址
if(!function_exists('GetIP'))
{
    function GetIP()
    {
        static $ip = NULL;
        if($ip !== NULL) return $ip;

        if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            $pos = array_search('unknown',$arr);
            if(false !== $pos) unset($arr[$pos]);
            $ip  = trim($arr[0]);
        }
        else if(isset($_SERVER['HTTP_CLIENT_IP']))
        {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        }
        else if(isset($_SERVER['REMOTE_ADDR']))
        {
            $ip = $_SERVER['REMOTE_ADDR'];
        }

        //IP地址合法验证
        $ip = (false !== ip2long($ip)) ? $ip : '0.0.0.0';
        return $ip;
    }
}

